#include "param.h"
#include "defs.h"
#include"types.h"

// static char *free_mem_start; // 空闲内存的起始地址
// static char *free_mem_end;   // 空闲内存的结束地址

// 初始化物理内存分配器
// void kinit(){
//     free_mem_start = (char *)FREE_MEM_START;
//     free_mem_end = (char *)FREE_MEM_END;
// }

// 分配一块内存
extern char end[];               // 链接脚本中定义的内核结束位置

static uint64 alloc_cur = 0;

void* kalloc() {
    if (alloc_cur == 0) {
        alloc_cur = (uint64)end;
        // 对齐到 16 字节
        alloc_cur = (alloc_cur + 15) & ~0xF;
    }

    uint64 next = alloc_cur + PGSIZE;//4KB

    if (next >= FREE_MEM_END) {
        return 0; // 分配失败：内存耗尽
    }

    void* result = (void*)alloc_cur;
    alloc_cur = next;

    //memset(result, 0, PGSIZE);

    return result;
}
